from flask import render_template, g, url_for, redirect, request, current_app
from flask import render_template, current_app, send_from_directory, request,  redirect, url_for
from datetime import datetime
from . import main_bp
from jinja2 import TemplateNotFound

# 语言映射配置
LANGUAGE_MAP = {
    'en': {
        'name': 'English',
        'flag': 'us'
    },
    'zh': {
        'name': '中文',
        'flag': 'cn'
    },
    'ja': {
        'name': '日本語',
        'flag': 'jp'
    },
    'ko': {
        'name': '한국어',
        'flag': 'kr'
    },
    'fr': {
        'name': 'Français',
        'flag': 'fr'
    },
    'de': {
        'name': 'Deutsch',
        'flag': 'de'
    }
}

@main_bp.before_request
def before_request():
    g.current_year = datetime.now().year
    g.languages = {code: info['name'] for code, info in LANGUAGE_MAP.items()}
    g.LANGUAGE_MAP = LANGUAGE_MAP  # 添加到全局变量
    
    # 从URL获取语言代码
    path_parts = request.path.split('/')
    if len(path_parts) > 1:
        lang_code = path_parts[1]
        g.current_language = lang_code if lang_code in LANGUAGE_MAP else 'en'
    else:
        g.current_language = 'en'
    
    # 设置当前语言
    g.current_flag = LANGUAGE_MAP[g.current_language]['flag']

def get_common_context(lang='en'):
    """获取通用的模板上下文"""
    return {
        'lang': lang,
        'LANGUAGE_MAP': LANGUAGE_MAP
    }

# 首页路由 - 默认英文版本
@main_bp.route('/')
@main_bp.route('/<lang>/')
def index(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path != '/':
        return redirect(url_for('main.index'), code=301)
    
    # 如果是不支持的语言,重定向到根路径
    if lang not in LANGUAGE_MAP:
        return redirect(url_for('main.index'), code=301)
    
    features = [
        {
            'icon': 'fas fa-music',
            'title': 'Interactive Music',
            'description': 'Create unique beats with our intuitive interface'
        },
        {
            'icon': 'fas fa-magic',
            'title': 'Special Effects',
            'description': 'Add magic to your music with special effects'
        },
        {
            'icon': 'fas fa-share-alt',
            'title': 'Share & Connect',
            'description': 'Share your creations with the Sprunki community'
        }
    ]
    
    context = get_common_context(lang)
    context.update({
        'features': features,
        'related_games': get_related_games()
    })
    
    # 英文版本使用默认模板,其他语言使用对应的语言模板
    template = 'index.html' if lang == 'en' else f'languages/{lang}/index.html'
    try:
        return render_template(template, **context)
    except TemplateNotFound:
        return render_template('index.html', **context)

# 其他页面路由 - 重定向到根路径版本
@main_bp.route('/about')
@main_bp.route('/<lang>/about')
def about(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.about'), code=301)
    
    # 如果是其他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.about'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('about.html', **context)

# 博客相关路由
@main_bp.route('/blog')
@main_bp.route('/<lang>/blog')
def blog(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.blog'), code=301)
    
    # 如果是其他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.blog'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('blog.html', **context)

@main_bp.route('/contact')
@main_bp.route('/<lang>/contact')
def contact(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.contact'), code=301)
    
    # 如果是其他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.contact'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('contact.html', **context)

@main_bp.route('/privacy')
@main_bp.route('/<lang>/privacy')
def privacy(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.privacy'), code=301)
    
    # 如果是���他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.privacy'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('privacy-policy.html', **context)

@main_bp.route('/terms')
@main_bp.route('/<lang>/terms')
def terms(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.terms'), code=301)
    
    # 如果是其他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.terms'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('terms-of-service.html', **context)

@main_bp.route('/cookie-policy')
@main_bp.route('/<lang>/cookie-policy')
def cookie_policy(lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.cookie_policy'), code=301)
    
    # 如果是其他语言,重定向到��文版本
    if lang != 'en':
        return redirect(url_for('main.cookie_policy'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    return render_template('cookie-policy.html', **context)

@main_bp.route('/set-language/<lang>')
def set_language(lang):
    response = redirect(request.referrer or url_for('main.index'))
    if lang in g.languages:
        response.set_cookie('language', lang)
    return response 

def get_related_games():
    """获取相关游戏列表"""
    return [
        {
            'title': 'Sprunki Horror',
            'image': 'images/jpg/Sprunked 2.0 Horror.png',
            'url': '#'
        },
        {
            'title': 'Sprunki Ruined',
            'image': 'images/jpg/Sprunki But I Ruined It.png',
            'url': '#'
        },
        {
            'title': "Sprunki Dandy's World",
            'image': "images/jpg/Sprunki Dandy's World Mod.png",
            'url': '#'
        },
        {
            'title': 'Sprunki Infected',
            'image': 'images/jpg/Sprunki Infected.png',
            'url': '#'
        },
        {
            'title': 'Sprunki Interactive',
            'image': 'images/jpg/Sprunki Interactive.jpg',
            'url': '#'
        }
    ]

# 统一的博客文章路由
@main_bp.route('/blog/<slug>')
@main_bp.route('/<lang>/blog/<slug>')
def blog_post(slug, lang='en'):
    # 如果是英文版本且不是根路径,重定向到根路径
    if lang == 'en' and request.path.startswith('/en/'):
        return redirect(url_for('main.blog_post', slug=slug), code=301)
    
    # 如果是其他语言,重定向到英文版本
    if lang != 'en':
        return redirect(url_for('main.blog_post', slug=slug), code=301)
    
    # 验证文章是否存在
    valid_slugs = [
        'exciting-new-features',
        '5-pro-tips',
        'community-spotlight'
    ]
    
    if slug not in valid_slugs:
        return redirect(url_for('main.blog'), code=301)
    
    context = get_common_context(lang)
    context.update({
        'show_related_games': True,
        'show_faq': False,
        'related_games': get_related_games()
    })
    
    try:
        return render_template(f'blog/{slug}.html', **context)
    except TemplateNotFound:
        return redirect(url_for('main.blog'), code=301)
    
@main_bp.route('/robots.txt/')
@main_bp.route('/robots.txt')
def robots():
    """Serve robots.txt file."""
    try:
        # 使用 send_file 而不是 send_from_directory
        return send_file(
            'static/robots.txt',
            mimetype='text/plain'
        )
    except Exception as e:
        current_app.logger.error(f"Error serving robots.txt: {e}")
        return "User-agent: *\nDisallow: /", 200, {'Content-Type': 'text/plain'}